define('components',['vue','text!../tpl/pc_nav.html','text!../tpl/pc-searchCommon.html','text!../tpl/upload_tpl.html','text!../tpl/dingdingUsers.html','tool','layer','vDatepicker','upcaseMoney'],function(Vue,pcNavTpl,pcSearch,upload_tpl,dingdingUsers_tpl,tool,layer,vDatepicker,upcaseMoney){
	Vue.component('pc_nav',
	{
	/*	mounted:function(){
		    
		},*/
/*		mixins: [tool.toor],*/
		props: ['message','cc_num','todo_num'],
		template: pcNavTpl,
		data: function () {
			  return {
			  };
		  },
		  watch:
		  {},
		  methods:
		  {
		  	go:function(n)
		  	{
		  	    
		  	    var router;
		  	    switch(n)
		  	    {
		  	    	case 0 :
		  	    	 router={name:'approvalist'}
		  	        break;
		  	        case 1:
		  	        router={name:'searchlist',params:{id:'pending'}};
		  	        break;
		  	        case 2:
		  	        router={name:'searchlist',params:{id:'agreed'}};
		  	        break;
		  	        case 3:
		  	        router={name:'searchlist',params:{id:'started'}};
		  	        break;
		  	         case 4:
		  	        router={name:'searchlist',params:{id:'CC'}};
		  	        break;
		  	        
		  	    }
		  	    this.$router.push(router);
		  	}
		  }
	});
	Vue.component('search_nav',
	{
		mixins: [tool.toor],
		props: ['navtype'],
		template: pcSearch,
		mounted:function(){
		},
		data: function () {
			  return {
			  	 open:false,
			  	 search:
			  	 {
			  	  	  Keyword:'',
			  	  	  launchStartTime:'',
			  	  	  launchEndTime:'',
			  	  	  finishStartTime:'',
			  	  	  finishEndTime:'',
			  	  	  people:{
			  	  	  	 name:''
			  	  	  }
			  	  }
			  };
		  },
		  watch:
		  {
		  },
		  methods:
		  {
		  	 openDingDingUser:function()
		  	 {
		  	 	    var _this=this;
		  	 	  	DingTalkPC.ready(function(){
			            // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
			            DingTalkPC.biz.contact.choose({
			                startWithDepartmentId: 0, //-1表示打开的通讯录从自己所在部门开始展示, 0表示从企业最上层开始，(其他数字表示从该部门开始:暂时不支持)
			                multiple: true, //是否多选： true多选 false单选； 默认true
			                // users: [String, String, ...], //默认选中的用户列表，userid；成功回调中应包含该信息
			                // disabledUsers:['10001', '10002', ...],// 不能选中的用户列表，员工userid
			                corpId: sessionStorage.getItem('corpId'), //企业id
			                max: 1, //人数限制，当multiple为true才生效，可选范围1-1500
			                limitTips:"", //超过人数限制的提示语可以用这个字段自定义
			                isNeedSearch:true,// 是否需要搜索功能
			                title :'', // 如果你需要修改选人页面的title，可以在这里赋值
			                local:"true", // 是否显示本地联系人，默认false
			                onSuccess: function(data) {
			                     _this.search.people=data[0];
			                },
			                onFail : function(err) {
		
			                }
			            });
			        });
		  	 },
		  	 clearSearch:function()
		  	 {
		  	 	 this.search={
			  	  	  Keyword:'',
			  	  	  launchStartTime:'',
			  	  	  launchEndTime:'',
			  	  	  finishStartTime:'',
			  	  	  finishEndTime:'',
			  	  	  people:{
			  	  	  	 name:''
			  	  	  }
			  	  };
		  	 },
		  	 searchFn:function()
		  	 {
		  	 	 this.$emit('getsearch',this.search);
		  	 }
		  }
	});
	Vue.component('upload_tpl',{
		mixins: [tool.toor],
		props:['message','name'],
		template:upload_tpl,
		data:function()
		{
			return{
			    fileList:[]
			};
		},
		methods:
		{
			fileChange:function(ev)
			{
				var _this=ev.target,formData=new FormData(),fileList = _this.files;
				$('#upload_type_modal').modal('hide');
				if(_this.files.length>9-this.fileList.length)
				{
					layer.msg("最多上传9个文件");
					return;
				}
				for(var i=0,o;o=fileList[i++];)
				{
					formData.append("file"+(i), o);
					/*var url;
					if(/image/g.test(o.type))
					{
						url=window.URL.createObjectURL(o);
					}else
					{
						url='/approve/pc/images/01.png';
					}*/
					/*this.fileList.push({
						file_url:url,
						name:o.name,
						size:o.size,
						file:o
					});*/
				 };
				 var _this=this;
				 $.ajax({
				 	 type:"post",
     	 		 	 tooken:false,
     	 		 	 data:formData,
     	 		 	 url: '/bpms/files',
     	 		 	 processData: false, 
                     contentType: false,
                     cache: false,
                     success:function(data){
                     	  for(var i=0,o;o=data.data[i++];)
                     	  {
                     	  	  _this.fileList.push({
                     	  	  	file_url:o,
                     	  	  	name:_this.name
                     	  	  });
                     	  };
                     	  _this.$emit('getfile',_this.fileList);
                     }
				 });
				 
			},
			removeFn:function(ev,inx,o)
			{
				var _this=this;
				this.myAjax({
     	 		 	 type:"post",
     	 		 	 tooken:false,
     	 		 	 data:JSON.stringify([o.file_url]),
     	 		 	 url: '/bpms/files/del',
     	 		 	 callback:function(data)
     	 		 	 { 
     	 		 	 	 if(data.code==200)
     	 		 	 	 {
     	 		 	 	     _this.fileList.splice(inx,1);
				             _this.$emit('getfile',_this.fileList);
     	 		 	 	 }
     	 		 	 }
     	 		});
				ev.cancelBubble=true;
			}
		}
		
	});
	Vue.component('dingding_users',
	{
		mounted:function(){
		     /*if(this.init && this.init.length>0)
		     {
		     	this.userData=this.userData.concat(this.init);
		     };*/
		   /* console.log('mountedthis.approve',this.approve_list)*/
		},
		mixins: [tool.toor],
		props:['message','approve_list','cc_list'],
		template:dingdingUsers_tpl,
		data: function () {
			  return {
			  	 userData:[],
			  	 ordefalut:false,
			  	 bg:['#486AB7','#55585A','#21711A','#9D792E','#5D241C','#AA83AA']
			  };
		},
		watch:
		{
			'approve_list':function(val)
			{
				 if(val &&  val.length>0)
				 {
				 	 
				 	 if(this.message=='approve')
					 {
					 	this.ordefalut=true;
					 	this.userData=val;
					 	this.$emit('getdingdinguser',this.userData);
					 }
				 }
				 
			},
			'cc_list':function(val)
			{
				 if(val && val.length>0)
				 {
				 	 
				 	 if(this.message!='approve')
					 {
					 	this.ordefalut=true;
					 	this.userData=val;
					 	this.$emit('getdingdinguser',this.userData);
					 }
				 }
				
			}
		},
		methods:
		{
			openDingDing:function(obj)
			{
				var _this=this,type=this.ordefalut?'customContact':'contact',aUser=obj.userid_list?obj.userid_list:[],disabledUser=[];
				if(this.ordefalut && this.message=='approve' && !obj.userid_list)//审批，有默认值 ，非可选人
				{
					return;
				}
				if(this.message!='approve')//抄送
				{
					type='contact';
					aUser=[];
				}
				/*if(type=='contact')
				{
				    for(var i=0;i<this.userData.length;i++)
				    {
				    	  var o=this.userData[i];
				    	  if(o.type)
				    	  {
				    	  	  disabledUser.push(o.emplId);
				    	  }else
				    	  {
				    	  	  aUser.push(o.emplId);
				    	  }
				    }
				}*/
				DingTalkPC.ready(function(){
			            // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
			            DingTalkPC.biz[type].choose({
			                startWithDepartmentId: 0, //-1表示打开的通讯录从自己所在部门开始展示, 0表示从企业最上层开始，(其他数字表示从该部门开始:暂时不支持)
			                multiple: true, //是否多选： true多选 false单选； 默认true
			                users: aUser, //默认选中的用户列表，userid；成功回调中应包含该信息
			                disabledUsers:disabledUser,/// 不能选中的用户列表，员工userid
			                corpId: sessionStorage.getItem('corpId'), //企业id
			                max: 1000, //人数限制，当multiple为true才生效，可选范围1-1500
			                limitTips:"", //超过人数限制的提示语可以用这个字段自定义
			                isNeedSearch:true,// 是否需要搜索功能
			                title :'', // 如果你需要修改选人页面的title，可以在这里赋值
			                local:"true", // 是否显示本地联系人，默认false
			                onSuccess: function(data) {
			                     if(data.length && data.length>0)
			                     {
			                     	if(!_this.ordefalut || _this.message!='approve')
			                     	{
			                     		for(var i=0,o;o=data[i++];)
			                     		{
			                     			_this.userData.push(o);
			                     		}
			                     		
			                     	}else
			                     	{
			                     	   _this.$set(obj,'emplId', data[0].emplId );
			                     	   _this.$set(obj,'avatar', data[0].avatar );
			                     	   _this.$set(obj,'name', data[0].name );
			                     	}
			                     	_this.$emit('getdingdinguser',_this.userData);
			                     }
			                },
			                onFail : function(err) {
			                  
			                }
			            });
			        });
			},
			remove:function(inx,o,ev)
			{
				ev.cancelBubble = true
				this.userData.splice(inx,1);
				this.$emit('getdingdinguser',this.userData);
				
			}
		}
	});
	Vue.component('vue-datepicker-local',vDatepicker.default);
	
	Vue.component('form-repeat',{
		mounted:function(){
			if(this.init!='' && this.init!=null)
			{
				this.initJSON=JSON.parse(this.init);
			}
			var arr=[];
			for(var i=0,o;o=this.initJSON[i++];)
			{
				  arr.push(Object.assign({},o))
			};
			this.repeatForm.push(arr);
			console.log('this.btnText',this.btnText);
		},
		mixins: [tool.toor],
		props:['init','title','btntext'],
		template: '<div @mouseleave="watchVal"><ul v-for="(o,index) in repeatForm"><li><em class="left" style="width: 200px;text-align: left;">{{ title?title:"行程明细" }} ({{index+1}})</em><i class="right"><div class="r-box clearfix" v-if="index!=0"><a href="javascript:;" style="float: right;" @click="repeatRemove(index)">删除</a></div></i></li><slot :o=o>请填充组件</slot></ul><div class="btnDiv"><button @click=\'repeatAdd\'>{{ btntext  ? btntext : "增加行程明细" }}</button></div></div>',
		data: function () {
			  return {
			  	repeatForm:
    			[
    			   /*{
    			   	 destination:'',
    			   	 startTime:'',
    			   	 endTime:''
    			   }*/
    			],
    			initJSON:null
			  };
		},
		watch:
		{
			'repeatForm':
			{
				handler: function(data){
					this.$emit('getrepeat',this.repeatForm);
				},
				 immediate: true
			}
			
		},
		methods:
		{
			repeatAdd:function()
    		{
    			var arr=[];
    			for(var i=0,o;o=this.initJSON[i++];)
    			{
    				  arr.push(Object.assign({},o))
    			};
    			this.repeatForm.push(arr);
    		},
    		repeatRemove:function(inx)
    		{
    			this.repeatForm.splice(inx,1);
    		},
    		watchVal:function()
    		{
    			this.$emit('getrepeat',this.repeatForm);
    		}
		}

	});
	Vue.component('dingdinguser-input',{
		mounted:function(){
			
		},
		mixins: [tool.toor],
		props:{
			init:String,
			max:
			{
			   type: Number,
               default: 1
			}
		},
		template: '<div class="dingdinguser-input"><input type="text" placeholder="请选择" v-model="userData.name" @click="digndingUser(userData)" /><i class="icon iconfont">&#xe620;</i><a href="javascript:;" @click="clear"  class="clearBtn">清除</a></div>',
		data: function () {
			  return {
			  	userData:{
			  		name:'',
			  		emplId:[]
			  	}
			  };
		},
		watch:
		{},
		methods:
		{
			digndingUser:function(obj)
			{
				var aUsers=[],_this=this;;
				DingTalkPC.ready(function(){
					    console.log('this.max',_this.max);
			            // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
			            DingTalkPC.biz.contact.choose({
			                startWithDepartmentId: 0, //-1表示打开的通讯录从自己所在部门开始展示, 0表示从企业最上层开始，(其他数字表示从该部门开始:暂时不支持)
			                multiple: true, //是否多选： true多选 false单选； 默认true
			                users:obj.emplId, //默认选中的用户列表，userid；成功回调中应包含该信息
			                // disabledUsers:['10001', '10002', ...],// 不能选中的用户列表，员工userid
			                corpId: sessionStorage.getItem('corpId'), //企业id
			                max:_this.max, //人数限制，当multiple为true才生效，可选范围1-1500
			                limitTips:"", //超过人数限制的提示语可以用这个字段自定义
			                isNeedSearch:true,// 是否需要搜索功能
			                title :'', // 如果你需要修改选人页面的title，可以在这里赋值
			                local:"true", // 是否显示本地联系人，默认false
			                onSuccess: function(data) {
			                     if(data.length && data.length>0)
			                     {
			                     	var sName='',aEplid=[];
			                     	for(var i=0;i<data.length;i++)
			                     	{
			                     		sName+=data[i].name+(data.length==1|| (i==data.length-1)? '':'、')
			                     		/*if(i<5)
			                     		{
			                     			sName+=data[i].name+(data.length==1|| i==4 || (i==data.length-1)? '':'、');
			                     		}*/
			                     		aEplid.push(data[i].emplId);
			                     	}
			                     	/*if(data.length>5)
			                     	{
			                     		sName=sName+('等'+data.length+'个人');
			                     	}*/
			                     	_this.userData.name=sName;
			                     	_this.userData.emplId=aEplid;
			                     	_this.$emit('getdingdinguser',_this.userData);
			                     }
			                },
			                onFail : function(err) {
			                    
			                }
			            });
			        });
			
			},
			clear:function()
			{
				 this.userData={};
				 this.$emit('getdingdinguser',this.userData);
			}
		}

	});
	Vue.directive('moneyupcase', {
		bind:function(el, binding)
		{
			if(Number(binding.value)|| Number(binding.value)==0)
			{
				/*el.value=upcaseMoney(binding.value);*/
				el.innerHTML=upcaseMoney(binding.value);
			}
		},
		update:function(el, binding){
			if(Number(binding.value)|| Number(binding.value)==0)
			{
				/*el.value=upcaseMoney(binding.value);*/
				el.innerHTML=upcaseMoney(binding.value);
			}
		}
	});
	
});

